void main(List<String> args) {

  // 考虑下面代码，你已经把a声明为了整数类型，后续赋值为null肯定会触发数据类型的报错
  // int? a = 1;
  // a = null;

  // 但是flutter2更新后，可以使用 ? 来代表a是个可空类型，这个时候null就可以赋值给a了
  int? a = 1;
  a = null;
  print(a);

  // 放在List这种类型的数据上也可以
  List<String>? l1 = ['1','2'];
  l1 = null;

  // 放在函数的参数类型与返回值类型那里也一样可以
  String? getData(String? url){
    if(url!=null){
      return '这是数据: xxxx';
    }
    return null;
  }
  print(getData(null));

  print('--------------------------');

  // 下面我们讲一讲类型断言
  String? str = 'this is a str';
  str = null;
  // print(str.length); //你现在会了可空类型的声明，但是问题来了，如果str被赋值为null，null哪来的length属性呢？所以这里会爆红
  //所以flutter2提供了一个类型断言语法，只需要在点的前面加一个感叹号，即可做到，有length属性就返回，没有就抛异常，注意，会抛异常哦
  // print(str!.length);

  // 所以最好使用try catch语句来解决类型断言可能带来的抛异常问题
  void printInfo(String? infos){
    try {
      print(str!.length);
    } catch (e) {
      print('null没有length属性');
    }
  };
  printInfo(null);
}